Para o sistema foram propostas as seguintes funcionalidades:
- Criar conta
- Fazer login
- Sair do login
- Exibir dados do usuário
- Editar dados do usuário
- Apagar usuário
- Adicionar cachorro
- Visualizar informações sobre o cachorro adicionado
- Editar informações sobre o cachorro
- Remover um cachorro da lista
- Programar lembrete de alimentação
- Editar lembrete de alimentação
- Remover lembrete de alimentação
- Registrar alimentação
- Visualizar alimentação
- Editar uma alimentação
- Remover uma alimentação
Seguindo o modelo MVC, inicialmente, foram criadas as seguintes estruturas a serem ligadas ao banco de dados:
[Table("Usuarios")]
public class Usuario
{
[Key]
[Display(Name = "ID do Usuário")]
public int IdUsuario { get; set; }
[Required(ErrorMessage = "Obrigatório informar o nome do usuário!")]
[Display(Name = "Nome do Usuário")]
public string NomeUsuario { get; set; }
[Required(ErrorMessage = "Obrigatório informar a senha!")]
[DataType(DataType.Password)]
public string Senha { get; set; }
[Required(ErrorMessage = "Obrigatório informar o Perfil do usuário!")]
public Perfil Perfil { get; set; }
}
public enum Perfil
{
Admin,
User
}
[Table("Cachorros")]
public class Cachorro
{
[Key]
public int IdCachorro { get; set; }
[Required(ErrorMessage ="Obrigatório informar o nome do cachorro!")]
[Display(Name = "Nome")]
public string NomeCachorro { get; set; }
[Required(ErrorMessage = "Obrigatório informar a data de nascimento do cachorro!")]
[Display(Name = "Nascimento")]
public string NascimentoCachorro { get; set; }
[Display(Name = "Raça")]
public string RacaCachorro { get; set; }
public ICollection<Alimentacao> Alimentacoes { get; set; }
}
public class Alimentacao
{
[Key]
public int IdAlimentacao { get; set; }
[Display(Name = "Hora")]
public DateTime HoraAlimentacao { get; set; } = DateTime.Now;
[Required(ErrorMessage = "Obrigatório Informar o Tipo de Alimentação!")]
[Display(Name = "Tipo de Alimentação")]
public TipoAlimentacao Tipo { get; set; }
[Required(ErrorMessage = "Obrigatório Informar a Quantidade de Alimento administrada!")]
[Display(Name = "Quantidade")]
public int QuantidadeAlimentacao { get; set; }
[Required(ErrorMessage = "Obrigatório Informar a Unidade de Medida!")]
[Display(Name = "Unidade de Medida")]
public UnidadeMedida UnidadeMedida { get; set; }
[Required(ErrorMessage = "Obrigatório Informar o Cachorro!")]
[Display(Name = "Cachorro")]
public int IdCachorro { get; set; }
[ForeignKey("IdCachorro")]
public Cachorro Cachorro { get; set; }
}
public enum TipoAlimentacao
{
Ração_Seca,
Ração_Úmida,
Alimento_Caseiro,
Petisco,
Alimento_Cru
}
public enum UnidadeMedida
{
Copo,
gramas,
Scoop,
Vasilhame
}
Dentro do contexto Controller, foram criadas as funcionalidades, ilustradas a seguir:
public IActionResult Login()
{
return View();
}
[AllowAnonymous]
public async Task <IActionResult> Logout()
{
await HttpContext.SignOutAsync();
return RedirectToAction("Login", "Usuarios");
}
public IActionResult Create()
{
return View();
}
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var usuario = await _context.Usuarios.FindAsync(id);
if (usuario == null)
{
return NotFound();
}
return View(usuario);
}
{
if (id == null)
{
return NotFound();
}
var usuario = await _context.Usuarios
.FirstOrDefaultAsync(m => m.IdUsuario == id);
if (usuario == null)
{
return NotFound();
}
return View(usuario);
}
public async Task<IActionResult> Index()
{
var dados = await _context.Cachorros.ToListAsync();
return View(dados);
}
public IActionResult Create() //HttpGet
{
return View();
}
public async Task<IActionResult> Edit(int? id) //HttpGet
{
if (id == null)
return NotFound();
var dados = await _context.Cachorros.FindAsync(id);
if (dados == null)
return NotFound();
return View(dados);
}
public async Task<IActionResult> Details(int? id)
{
if (id == null)
return NotFound();
var dados = await _context.Cachorros.FindAsync(id);
if (dados == null)
return NotFound();
return View(dados);
}
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
return NotFound();
var dados = await _context.Cachorros.FindAsync(id);
if (dados == null)
return NotFound();
return View(dados);
}
public async Task<IActionResult> Index()
{
var appDbContext = _context.Alimentacoes.Include(a => a.Cachorro);
return View(await appDbContext.ToListAsync());
}
public IActionResult Create()
{
ViewData["IdCachorro"] = new SelectList(_context.Cachorros, "IdCachorro", "NomeCachorro");
return View();
}
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var alimentacao = await _context.Alimentacoes.FindAsync(id);
if (alimentacao == null)
{
return NotFound();
}
ViewData["IdCachorro"] = new SelectList(_context.Cachorros, "IdCachorro", "NomeCachorro", alimentacao.IdCachorro);
return View(alimentacao);
}
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var alimentacao = await _context.Alimentacoes
.Include(a => a.Cachorro)
.FirstOrDefaultAsync(m => m.IdAlimentacao == id);
if (alimentacao == null)
{
return NotFound();
}
return View(alimentacao);
}